﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Security;

namespace LiveatEdu.model
{
    /*
     * Curitiba 14/12/2011 Escrito por: Diego Henrique da Silva
     * Classe destinada a manter os dados de usuários a serem criados no AD
     */

    public abstract class Person
    {
        #region parametros chave para criação dos usuários dentro do AD/Live@Edu

        public virtual string DistinguishedName { get; set; } //nome da localização no LDAP do usuário
        public virtual string Cn { get; set; } //nome do usuário atributo "cn" do LDAP
        public virtual string Co { get; set; } //país do usuário atributo "co" do LDAP
        public virtual string Title { get; set; } // titulo do usuário, ex: matrícula atributo "title" do LDAP
        public virtual string Company { get; set; } //empresa do usuário atributo "company" do LDAP
        public virtual string StreetAddress { get; set; } // nome da rua de endereço do usuário atributo "streetAddress" do LDAP
        public virtual string Department { get; set; } // departamento do usuário atributo "department" do LDAP
        public virtual string DisplayName { get; set; } // nome de exibição do usuário atributo "displayName" do LDAP
        public virtual string Description { get; set; } // descrição do usuário atributo "description" do LDAP
        public virtual string GivenName { get; set; } // primeiro nome do usuário atributo "givenName" do LDAP
        public virtual string Mail { get; set; } //atributo e-mail do usuário que será gerado no Live@edu atributo "mail" do LDAP
        public virtual string MemberOf { get; set; } //atributo com o distinguishedName dos grupos que o usuário pertence atributo "memberOf" do LDAP
        public virtual string MailNickname { get; set; } //nome da mailbox do Live@edu atributo "mailNickname" do LDAP
        public virtual string Name { get; set; }// nome do usuário atributo "name" do LDAP
        public virtual string Sn { get; set; }// sobrenome do usuário atributo "sn" do LDAP
        public virtual string St { get; set; } // estado de residencia do usuário atributo "st" do LDAP
        public virtual string PhysicalDeliveryOfficeName { get; set; } // campo destinado a colocar qual é o curso que cursa
        public virtual string SamAccountName { get; set; }// nome do login do usuário
        public virtual SecureString Password { get; set; } // senha do usuário 
        #endregion

        public virtual SecureString makePassword(String password)
        {
            SecureString newPassword = new SecureString();
            if (password != null && password != "")
            {
                foreach (char c in password)
                {
                    newPassword.AppendChar(c);
                }
            }
            else
            {
                string s = "senha@123";
                foreach (char c in s)
                {
                    newPassword.AppendChar(c);
                }
            }

            return newPassword;
        }

        public virtual string makeDistinguishedName(string samAccountName, string departament)
        {
            string distinguishedName;
            switch (departament)
            {
                case "" + "Administração de Empresas" + "":
                    distinguishedName = "CN=" + samAccountName + "OU=ATIVOS,OU=ADMINISTRACAO,OU=CURSOS,OU=FACET,DC=facet,DC=edu,DC=br";
                    break;

                case "" + "Ciências Contábeis" + "":
                    distinguishedName = "CN=" + samAccountName + "OU=ATIVOS,OU=CONTABIL,OU=CURSOS,OU=FACET,DC=facet,DC=edu,DC=br";
                    break;

                case "" + "Sistemas de Informação" + "":
                    distinguishedName = "CN=" + samAccountName + "OU=ATIVOS,OU=SI,OU=CURSOS,OU=FACET,DC=facet,DC=edu,DC=br";
                    break;

                case "" + "pós graduação" + "":
                    distinguishedName = "CN=" + samAccountName + "OU=ATIVOS,OU=POS,OU=CURSOS,OU=FACET,DC=facet,DC=edu,DC=br";
                    break;
                default:
                    distinguishedName = null;
                    break;
            }
            return distinguishedName;


        }

        public virtual string makeMail(string samAccountName, string departament)
        {
            string mail;
            switch (departament)
            {
                case "" + "Administração de Empresas" + "":
                    mail = samAccountName + "@adm.facet.edu.br";
                    break;

                case "" + "Ciências Contábeis" + "":
                    mail = samAccountName + "@cont.facet.edu.br";
                    break;

                case "" + "Sistemas de Informação" + "":
                    mail = samAccountName + "@bsi.facet.edu.br";
                    break;

                case "" + "pós graduação" + "":
                    mail = samAccountName + "@pos.facet.edu.br";
                    break;

                default:
                    mail = null;
                    break;
            }
            return mail;
        }

        public virtual string makeGivenName(string givenName)
        {
            return (string)(givenName).Split(' ').GetValue(0);
            
        }

        public virtual string makeSn(string cn)
        {
            
            return (string)cn.Split(' ').GetValue(cn.Split(' ').Length - 1);
        }

    }
}